﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Financeiro.Dados;
using System.Data;

namespace Financeiro.Model
{
    public class FolhaPagamentosModel
    {
        #region Fields

        private int mes;
        private int ano;

        #endregion

        #region Properties
        public int Mes
        {
            get { return mes; }
            set { mes = value; }
        }

        public int Ano
        {
            get { return ano; }
            set { ano = value; }
        }

        #endregion

        #region Constructors

        public FolhaPagamentosModel()
        {}

        public FolhaPagamentosModel(int mes, int ano)
        {
            this.mes = mes;
            this.ano = ano;
        }

        #endregion

        #region Methods

        // função que acessa o banco de dados para mostrar a folha de pagamento entre uma data inicial e final
        public DataTable buscarFolha()
        {
            return FolhaPagamentoDAO.buscarFolhaDAO(Mes, Ano);

        }

        // função que cria a folha de pagamentos no banco de dados
        /* 0 = Folha de pagamento no futuro
         * 1 = Mês atual - só posso gerar após o fim do mês
         * 2 = Intervalo válido -- nunca será retornado
         * 3 = Folha gerada com sucesso
         * 4 = Folha de pagamentos já existente para o período
         * */
        public int gerarFolhaPagamento()
        {

            int resultado;

            // verifica se o intervalo é valido
            resultado = verificarIntervalo(Mes, Ano);

            if (resultado == 2)
            {
                //verifica se é ou não pra gerar a folha de pagamento
                // retorna false se a folha de pagamentos já existe
                bool gerarFolha = FolhaPagamentoDAO.gerouFolhaDAO(Mes, Ano);

                if (gerarFolha)
                {
                    // gera a folha de pagamentos
                    FolhaPagamentoDAO.gerarFolha(Mes, Ano);
                    resultado = 3;
                }
                else
                {
                    resultado = 4;
                }

            }

            return resultado;
        }


        #endregion

        #region Static Methods


        // função que retorna strings sobre o status da folha de pagamento
        static public string retornarMensagem(int indice)
        {
            string mensagem;
           
            switch(indice)
            {
                case 0: 
                    mensagem = "Erro! Período no Futuro";
                    break;
                case 1:
                    mensagem = "Erro! Mês não terminou";
                    break;
                case 2:
                    mensagem = "Período Ok";
                    break;
                case 3:
                    mensagem = "Folha de Pagamento Gerada com Sucesso";
                    break;
                case 4:
                    mensagem = "Erro! Folha de Pagamento já existe!";
                    break;
                default:
                    mensagem = "Erro desconhecido";
                    break;

            }
            return mensagem;
        }


        // função para verificar se o mes/ano está correto
        static private int verificarIntervalo(int mes, int ano)
        {
         // mes no futuro
            if (mes > DateTime.Now.Month && ano >= DateTime.Now.Year)
            {
                return 0;
            }
         // mes corrente -> folha só pode ser gerada após a passagem do mes 
            else if (mes == DateTime.Now.Month && ano == DateTime.Now.Year)
            {
                return 1;
            }
         // intervalo é válido
            else
            {
                return 2;
            } 
                

        }
        
        #endregion

    }
}
